package com.xj.algorithm.leetcode;

/**
 * 回文数
 */
public class L9_回文数 {

    /**
     * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
     *
     * 示例 1:
     * 输入: 121
     * 输出: true
     *
     * 示例 2:
     * 输入: -121
     * 输出: false
     * 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
     *
     * 示例 3:
     * 输入: 10
     * 输出: false
     * 解释: 从右向左读, 为 01 。因此它不是一个回文数。
     */

    public static void main(String[] args) {
        System.out.println(isPalindromeOffice(121));
        System.out.println(isPalindromeOffice(-121));
        System.out.println(isPalindromeOffice(10));
        System.out.println(isPalindromeOffice(11));
    }

    //自己的解法：使用字符串两边遍历
    public static boolean isPalindrome(int x) {
        if(x<0){
            return false;
        }

        String value= String.valueOf(x);
        int length=value.length();
        int prefix=0,suffix=length-1;
        while(prefix<=suffix){
            if(value.charAt(prefix)==value.charAt(suffix)){
                prefix++;
                suffix--;
            }else{
                return false;
            }
        }
        return true;
    }


    //官方最优解：只反转1半数字
    public static boolean isPalindromeOffice(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        int revertedNumber = 0;
        while(x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }
        return x == revertedNumber || x == revertedNumber/10;
    }
}
